/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Util;

import java.awt.Graphics2D;
import java.util.Vector;
import javax.swing.JPanel;
import spaceinvaders.Func;

/**
 *
 * @author Lucas
 */
public class Nave extends Sprite {
    //Posição inicial da nave, quantidade de vidas do jogador e para onde a nave deve se mover
    int xInicial, vidas, movimento;
    //Vetor de tiros
    Vector<Tiro> tiros;
    //Objetos auxiliares para percorrer o vetor
    Object[] ti;
    Tiro tir;
    //Tiro dos aliens
    Vector<TiroAlien> tiroal;
    Object[] tial;
    TiroAlien tal;
    //Verificar se o usuário já atirou (permitindo apenas 1 tiro por pressionamento de tecla)
    boolean atirou;
    //Visão da parte funcional
    Func f;

    public Nave(String nome, int x, int y, Func f) {
        super(nome, x, y);
        xInicial = x;
        vidas = 3;

        tiros = new Vector<Tiro>();
        atirou = false;
        this.f = f;
    }
    
    public void setTiroal(Vector<TiroAlien> tiroal){
        this.tiroal = tiroal;
    }

    
    public void update() {
        //Se o movimento é diferente de 0, a nave se move para a esquerda ou direita
        if (movimento == -1) {
            if (x > 0) {
                x -= 5;
                r.x = x;
            }
        } else if (movimento == 1) {
            if (x + img.getWidth(null) < 640) {
                x += 5;
                r.x = x;
            }
        }
        //Atualiza os tiros
        ti = tiros.toArray();
        for (Object o : ti) {
            tir = (Tiro) o;
            tir.update();
            if (tir.getY() < -15) {
                tiros.remove(tir);
            }
        }
        //Verifica se um dos tiros dos aliens atingiu a nave
        tial = tiroal.toArray();
        for(Object o: tial){
            tal = (TiroAlien) o;
            if(tal.getRect().intersects(r)){
                tiroal.remove(tal);
                //Se a nave tem mais de 1 vida, diminui a quantidade
                if(vidas > 1){
                    vidas--;
                }
                //Senão, o jogador perde o jogo
                else{
                    f.initPerdeu();
                    f.getGraf().initPerdeu();
                }
            }
        }
    }

    public void setMovimento(int movimento) {
        this.movimento = movimento;
    }

    public void reset() {
        x = xInicial;
        vidas = 3;
        movimento = 0;
        tiros.clear();
    }

    public void atirar() {
        atirou = true;
        Tiro t = new Tiro("Tiro", x + 19, y);
        tiros.add(t);
    }

    public boolean getAtirou() {
        return atirou;
    }

    public void setAtirou(boolean atirou) {
        this.atirou = atirou;
    }

    public Vector<Tiro> getTiros() {
        return tiros;
    }
    
    public int getVidas(){
        return vidas;
    }

    @Override
    public void draw(Graphics2D g2d, JPanel j) {
        //Desenha a nave e os tiros
        super.draw(g2d, j);
        Object[] tiros2 = tiros.toArray();
        for (Object o : tiros2) {
            Tiro t = (Tiro) o;
            t.draw(g2d, j);
        }
    }
}
